/**
 * Created by Yu Jin Xian on 2016/12/7.
 */
function executionContext() {
    var color = 'blue';

    function changeColor() {
        if (color == 'blue') {
            color = 'red';
        } else {
            color = 'blue';
        }
    }

    changeColor();
    alert('Color is now ' + color);

    function nest() {
        var color = 'blue';

        function changeColor() {
            var anotherColor = 'red';

            function swapColors() {
                var tempColor = anotherColor;
                anotherColor = color;
                color = tempColor;
                // 这里可以访问 color、anotherColor 和 tempColor
            }

            // 这里可以访问 color 和 anotherColor, 但不能访问 tempColor
            swapColors();
        }

        // 这里只能访问 color;
        changeColor();
    }
}

function extendScopeChain() {
    var qs = '?debug=true';
    with (location) {
        var href = 'http://w3c.com/';
        var url = href = qs;
    }
    return url;
}

function NotBlockScope() {
    if (true) {
        var color = 'blue';
    }
    alert(color);                   // "blue"

    for (var i = 0; i < 10; i++) {
        doSomething(i);
    }
    alert(i);

    function doSomething(i) {

    }

    function add(num1, num2) {
        var sum = num1 + num2;
        return sum;
    }

    var result = add(10, 10);       // 30
    alert(sum);                     // 由于 sum 不是有效的变量, 因此会导致错误

    function globalVriables() {
        function add(num1, num2) {
            sum = num1 + num2;
        }

        var result = add(10, 30);   // 30
        alert(sum);                 // 30
    }

    var color = 'blue';

    function getColor() {
        return color;
    }

    alert(getColor());              // "blue"

    function namesake() {
        var color = 'blue';

        function getColor() {
            var color = 'red';
            return color;
        }

        alert(getColor());
    }
}

